import pandas as pd

def read_file():
    filepath = '../course_datas/c39_explode_to_manyrows/读者提供的数据-输入.xlsx'
    df = pd.read_excel(filepath)
    # print(df.head())

    # 2. 把多列合并到一列¶
    merge_names = list(df.loc[:,'Supplier':].columns.values)
    # print(merge_names)
    df['merge'] = df.loc[:,'Supplier':].apply(merge_cols,axis=1)
    # print(df.head(10))
    # 把不用的列删除掉
    df.drop(merge_names,axis=1,inplace=True)
    # 3. 使用explode把一列变多行
    df["merge"] = df['merge'].str.split('#')
    # 将merge列 拆分多行  执行explode变成多行
    df_explode = df.explode('merge')
    # 分别从merge中提取两列
    df_explode['Supplier'] = df_explode['merge'].str.split("|").str[0]
    df_explode['Supplier PN'] = df_explode['merge'].str.split("|").str[1]
    # 把merge列删除掉，得到最终数据
    df_explode.drop("merge",axis=1,inplace=True)
    # print(df_explode.head(10))

    # 5. 输出到结果Excel
    df_explode.to_excel('../course_datas/c39_explode_to_manyrows/读者提供的数据-输出2.xlsx',index=False)

def merge_cols(x):
    '''
    X 是一行 series 把他们按分隔符 进行合并
    :param x:
    :return:
    '''
    # 删除为空的列
    x = x[x.notna()]
    # 使用x.values用于合并
    y = x.values
    # 合并后的列表，每个元素是"Supplier" + "Supplier PN"对
    result = []
    # range的步长为2，目的是每两列做合并
    for index in range(0,len(y),2):
        # 使用竖线作为"Supplier" + "Supplier PN"之间的分隔符
        result.append(f'{y[index]}|{y[index+1]}')
    # 将所有两两对，用#分割，返回一个大字符串
    return "#".join(result)



if __name__ == '__main__':
    read_file()